home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
program
/
arp68bk.zoo
/
arp.src
/
lea_move.s
< prev
next >
Wrap
Text File
|
1985-11-20
|
4KB
|
108 lines
; Program Name: LEA_MOVE.S
; Version: 1.003
; Assembly Instructions:
; Assemble in Relocatabe mode and save with a TOS extension.
; Program Function:
; Compares the relative speed and memory requirements of
; lea label(pc), Am
; move.l An, (Am)
; and lea label, Am
; move.l An, (Am)
; to move.l An, label
; The execution time reported is for 50,000 executions of each algorithm.
; In addition, this program's first AUT can disrupt the adaptive algorithm
; because the address that is loaded in register A2 depends on the displacement
; between the instruction "lea label(pc), a2" and the label it references.
; When that instruction is executed in the adaptive algorithm, whatever
; address is the "displacement" distance away from the instruction will be
; loaded into register A2. Then the instruction following, "move.l a0, (a2)
; will write whatever is in register A0 into that memory location.
; If the address stored in register A2 while the AUT is being executed by
; the adaptive algorithm happens to be within the adaptive algorithm's program
; or data space, the results could be unpleasant.
; In fact, an undisciplined store of this type is capable of corrupting any
; instruction or data that happens to be separated from the LEA instruction by
; an amount equal to the displacement, and the results could be catastrophic.
calculate_program_size:
lea -$102(pc), a1 ; Fetch basepage start address.
lea program_end, a0 ; Fetch program end = array address.
trap #6 ; Return unused memory to op system.
lea stack, a7
initialize_registers_1:
lea header_1, a0
lea header_2, a1
lea lea_move_start, a3
lea lea_move_end, a4
lea heading, a5
move.w #50000, d7
trap #9
initialize_registers_2:
lea header_3, a0
lea header_4, a1
lea long_lea_start, a3
lea long_lea_end, a4
lea heading, a5
move.b #0, (a5) ; Store a NULL in first byte to create a
move.w #50000, d7 ; null string so that heading gets printed
trap #9 ; only once.
initialize_registers_3:
lea header_5, a0
lea header_6, a1
lea move_start, a3
lea move_end, a4
lea heading, a5
move.w #50000, d7
trap #9
terminate:
trap #8
lea_move_start: ; This algorithm is potentially nocuous to
lea label(pc), a2 ; the adaptive algorithm because a displacement
move.l a0, (a2) ; will be stored in A2, not an address.
lea_move_end:
long_lea_start: ; This algorithm poses no threat because an
lea label, a2 ; address in this program's data area will be
move.l a0, (a2) ; stored in A2.
long_lea_end:
move_start: ; This algorithm poses no threat because an
move.l a0, label ; address in this program's data area will be
move_end: ; stored in A2.
data
heading: dc.b "LEA_MOVE Program Results",$D,$A,$D,$A,0
header_1: dc.b " Elapsed time for lea label(pc), Am ",$D,$A
dc.b " move.l An, (Am): ",0
header_2: dc.b " Memory required for first algorithm: ",0
header_3: dc.b $D,$A," Elapsed time for lea label, Am ",$D,$A
dc.b " move.l An, (Am): ",0
header_4: dc.b " Memory required for second algorithm: ",0
header_5: dc.b $D,$A," Elapsed time for move.l An, label: ",0
header_6: dc.b " Memory required for third algorithm: ",0
bss
align
label: ds.l 1
ds.l 96
stack: ds.l 0
program_end: ds.l 0
end